/**
 ****************************************************************************************************
 * @file        exti.c
 * @version     V1.0
 * @brief       外部中断 驱动代码
 ****************************************************************************************************
 * @attention   Waiken-Smart 慧勤智远
 *
 * 实验平台:    GD32H759IMT6小系统板
 *
 ****************************************************************************************************
 */
 
 #include "delay.h"
 #include "led.h"
 #include "key.h"
 #include "exti.h"
 
 
 /**
  * @brief       外部中断初始化函数
  * @param       无
  * @retval      无
  */
 void extix_init(void)
 {   
     rcu_periph_clock_enable(RCU_SYSCFG); /* 使能SYSCFG时钟 */	
     
     key_init();                          /* 初始化按键对应的IO口 */	
        
     syscfg_exti_line_config(KEY0_EXTI_PORT_SOURCE, KEY0_EXTI_PIN_SOURCE);   /* 配置KEY0引脚作为EXTI源 */	
     syscfg_exti_line_config(WKUP_EXTI_PORT_SOURCE, WKUP_EXTI_PIN_SOURCE);   /* 配置WKUP引脚作为EXTI源 */	
         
         exti_init(KEY0_EXTI_LINE, EXTI_INTERRUPT, EXTI_TRIG_RISING);            /* 初始化KEY0_EXTI_LINE，KEY0配置为上升沿触发中断 */	
         exti_init(WKUP_EXTI_LINE, EXTI_INTERRUPT, EXTI_TRIG_RISING);            /* 初始化WKUP_EXTI_LINE，WKUP配置为上升沿触发中断 */	
         
       nvic_irq_enable(KEY0_EXTI_IRQn, 0, 2);         /* 使能外部中断线KEY0_EXTI_LINE中断请求并设置优先级，抢占优先级为0，响应优先级为2 */	
         nvic_irq_enable(WKUP_EXTI_IRQn, 1, 2);         /* 使能外部中断线WKUP_EXTI_LINE中断请求并设置优先级，抢占优先级为1，响应优先级为2 */	
 
         exti_interrupt_flag_clear(KEY0_EXTI_LINE);     /* 清除KEY0_EXTI_LINE上的中断标志位 */	
         exti_interrupt_flag_clear(WKUP_EXTI_LINE);     /* 清除WKUP_EXTI_LINE上的中断标志位 */	
 }
 
 /**
  * @brief       KEY0 外部中断服务程序
  * @param       无
  * @retval      无
  */
 void KEY0_EXTI_IRQHandler(void)
 {
        delay_ms(20);	                              /* 消抖 */
     exti_interrupt_flag_clear(KEY0_EXTI_LINE);  /* 清除KEY0_EXTI_LINE上的中断标志位 */
   
       if (KEY0 == 1)	                            /* 按键KEY0按下 */   
       {
         LED0_TOGGLE();                          /* LED0状态取反 */
       }		 		
 }
 
 /**
  * @brief       WK_UP 外部中断服务程序
  * @param       无
  * @retval      无
  */
 void WKUP_EXTI_IRQHandler(void)
 {
       delay_ms(20);                               /* 消抖 */			 
     exti_interrupt_flag_clear(WKUP_EXTI_LINE);  /* 清除WKUP_EXTI_LINE上的中断标志位 */  	
   
       if (WK_UP == 1)		                          /* 按键WK_UP按下 */ 
       {
         LED1_TOGGLE();                          /* LED1状态取反 */
       } 	  
 }
 
 
 
 